package main

import (
	"fmt"
)



//题目：
/*
将一个给定字符串根据给定的行数，以从上往下、从左到右进行 Z 字形排列。
比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时，排列如下：
	L   C   I   R
	E T O E S I I G
	E   D   H   N
之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。
请你实现这个将字符串进行指定行数变换的函数：
string convert(string s, int numRows);
示例 1:
输入: s = "LEETCODEISHIRING", numRows = 3
输出: "LCIRETOESIIGEDHN"
示例 2:
输入: s = "LEETCODEISHIRING", numRows = 4
输出: "LDREOEIIECIHNTSG"
解释:
	L     D     R
	E   O E   I I
	E C   I H   N
	T     S     G

*/


//方法一：

/*
func convert(s string, numRows int) string {
	// 第一步：通过指定顺序遍历二维数组

	var table [2000][2000]byte
	//length := len(s)
	k := 0
	row := 0
	col := 0

	for ; k < len(s); {
		if row == 0 {
			for ; row < numRows; row++ {
				if k<len(s){
					table[row][col] = s[k]
					k++
				}
			}
		}
		row--

		if row == numRows - 1 {
			 j := numRows - 1

			 for i:=1;i <= j-1;i++{
				 if k<len(s) {
			 		table[row-i][col+i]=s[k]
			 		k++
				 }
			 }

		}
		//fmt.Println(row) //2
		row=0
		col= col + numRows - 1
		if numRows==1 {
			col++
		}
		//fmt.Println(col) // 1
	}



     var res string
	for i:=0;i < numRows;i++ {
		for j:=0; j <= col;j++ {
			if table[i][j] != 0 {
				res+=string(table[i][j])
			}
			//fmt.Printf("%c,",table[i][j])
		}

		//fmt.Println("")
	}
	return res
}
*/






func convert(s string, numRows int) string {
	// 第一步：通过指定顺序遍历二维数组

	var table [2000][2000]byte
	//length := len(s)
	k := 0
	row := 0
	col := 0
	// 一列如何运行
	for ; k < len(s); {
		if row == 0 {
			for ; row < numRows; row++ {
				if k<len(s){
					table[row][col] = s[k]
					k++
				}
			}
		}
		row--
		//从 斜下角运行
		if row == numRows - 1 {
			for ; row > 1 ;{
				row--
				col++
				if k < len(s) {
					table[row][col] = s[k]
					k++
				}
			}

		}
		col++
		row--
		if row < 0  {
			row=0
		}
	}
	var res string
	for i:=0;i < numRows;i++ {
		for j:=0; j <= col;j++ {
			if table[i][j] != 0 {
				res+=string(table[i][j])
			}
			fmt.Printf("%c,",table[i][j])
		}

		fmt.Println("")
	}
	return res
}





func main() {
	s := "AB"
	numRows := 1
	fmt.Println(convert(s, numRows))
}
